package cn.yeziji.forum.dao.intf;

import cn.org.atool.fluent.mybatis.base.IBaseDao;
import cn.yeziji.forum.bo.file.FileBO;
import cn.yeziji.forum.common.ForumPageResult;
import cn.yeziji.forum.dto.file.ForumFilePagingDTO;
import cn.yeziji.forum.entity.ForumFileEntity;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * 论坛文件管理
 *
 * @author gzkemays
 * @since 2022/03/31 15:44
 */
public interface ForumFileDao extends IBaseDao<ForumFileEntity> {
  String OSS_PATH = "https://img.yeziji.xyz/";
  String USER_AVATAR = "user/avatar/";
  String CHATROOM_IMG = "temp/";
  String DETAIL_IMG = "detail/";

  /**
   * 构造地址
   *
   * @param mode 作用域
   * @param filename 文件名【自行追加后缀】
   * @return 预期访问地址
   */
  default String buildUrl(String mode, String filename) {
    if (mode.equals(USER_AVATAR)) {
      return OSS_PATH + USER_AVATAR + filename;
    }
    return OSS_PATH + mode + filename;
  }

  /**
   * 保存文件
   *
   * @param file 文件
   * @param mode 文件作用域
   * @return 文件访问地址
   * @deprecated 舍弃
   */
  String saveFile(MultipartFile file, String mode);

  /**
   * 根据 target 获取 entity
   *
   * @param target target
   * @return entity
   */
  ForumFileEntity getEntityByTarget(String target);

  /**
   * 获取 entity 列表
   *
   * @param source 文件列表名
   * @return 文件列表
   */
  List<ForumFileEntity> getEntitiesBySource(String source);

  ForumPageResult<ForumFileEntity> getFileEntitiesPage(ForumFilePagingDTO pagingDTO);

  List<ForumFileEntity> getEntitiesByScope(String scope);
  /**
   * 保存数据
   *
   * @param bo 数据传输类型
   */
  void save(FileBO bo);

  /**
   * 删除文件
   *
   * @param bo 数据传输
   */
  void del(FileBO bo);
}
